Vanilla JavaScript in the browser now has many of the features of jQuery built in,
Therefore, we don’t need to use jQuery to do many things.
In this article, we’ll look at the vanilla JavaScript equivalent of jQuery features.
Selecting Elements
We can use the querySelector
method to select a single element with the given selector in vanilla JavaScript.
Vanilla JavaScript also has the querySelectorAll
method to select multiple elements with the given selector with vanilla JavaScript.
For instance, we can write:
document.querySelector("div");
to select the first div in the document.
And select all the divs with:
document.querySelectorAll("div");
querySelectorAll
returns a NodeList object, which is an iterable object with all the selected nodes inside.
In jQuery, we have:
$("div");
to select all the divs.
Run a Function on All Selected Elements
In jQuery, we can run a function on all selected elements.
For instance, we can hide all the divs by writing:
$("div").hide();
To do the same thing with vanilla JavaScript, we can use the forEach
method:
document.querySelectorAll("div")
.forEach(div => {
div.style.display = "none"
})
We can also use the for-of loop:
for (const div of document.querySelectorAll("div")) {
div.style.display = "none"
}
The NodeList returned by querySelector
can also be spread:
const divs = [...document.querySelectorAll("div")]
divs
.forEach(div => {
div.style.display = "none"
})
divs
is now an array instead of a NodeList.
This means we can run many array methods on it.
Finding an Element within Another
To find an element within another with jQuery, we use the find
method:
const div = $("div");
//...
div.find(".box");
To do the same thing with vanilla JavaScript, we can use querySelector
to find one element and querySelectorAll
to find all instances of the element with the given selector.
So we write:
const div = document.querySelector('div')
//...
div.querySelector(".box");
to find the first element with class box
in the div.
And we write:
const div = document.querySelector('div')
//...
div.querySelectorAll(".box");
to find all elements with class box
in the div.
Traversing the Tree with parent()
, next()
, and prev()
jQuery has the parent
method to get the parent element of an element.
jQuery’s next
method returns the next sibling element of an element.
And jQuery’s prev
method returns the previous sibling element of an element.
To use them, we can write:
$("div").next();
$("div").prev();
$("div").parent();
In vanilla JavaScript, we can write:
const div = document.querySelector("div");
div.nextElementSibling;
div.previousElementSibling;
div.parentElement;
nextElementSibling
returns the next sibling element.
previousElementSibling
returns the previous sibling element.
And parentElement
returns the parent element.
Working with Events
jQuery lets us add event handlers easily to an element.
For instance, we can write:
$("button").click((e) => {
/* handle click event */
});
$("button").mouseenter((e) => {
/* handle click event */
});
$(document).keyup((e) => {
/* handle key up event */
});
to add a click
event handler, mouseenter
event handler, and keyup
event handler on the element that’s selected respectively.
To do the same thing with vanilla JavaScript, we can use the addEventListener
method:
document
.querySelector("button")
.addEventListener("click", (e) => {
/* ... */
});
document
.querySelector("button")
.addEventListener("mouseenter", (e) => {
/* ... */
});
document
.addEventListener("keyup", (e) => {
/* ... */
});
We just select the element with querySelector
and call addEventListener
with the event name as the first argument and the event handler callback as the 2nd argument.
Conclusion
We can do many basic DOM operations like selecting elements, traversing the DOM tree, and adding event listeners to elements with vanilla JavaScript.